package day05;

import java.util.*;

/*
Set的特点：无序的，元素不允许重复、任意长度。
          没有索引，没有get、set方法。
Set是接口，实现类：HashSet（常用的）、TreeSet……

列表：[]
元组:()
字典：{key:value}
集合：{}
 */
public class Demo07 {
    public static void main(String[] args) {
        Set<String> sets = new HashSet<>();

        sets.add("red");
        sets.add("yellow");
        sets.add("black");
        sets.add("red");

        System.out.println(sets);

        System.out.println("长度：" + sets.size());
        System.out.println("是否包含：" + sets.contains("blue"));
        // 根据元素删除
        sets.remove("yellow");

        // 遍历元素 没有索引，不能用for循环
        // foreach遍历
        for (String s : sets) {
            System.out.println(s);
        }

        List<Integer> lst = Arrays.asList(1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6);
        List<Integer> ret = quChong(lst);
        System.out.println(ret);

        lst = Arrays.asList(11, 12, 7, 8, 9, 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6);
        ret = quChong(lst);
        System.out.println(ret);
    }

    /*
    利用set不能有重复元素的特点，可以给列表去重。
     */
    public static List<Integer> quChong(List<Integer> lst) {
        Set<Integer> set = new HashSet<>();
        List<Integer> ret = new ArrayList<>();

        // 取出列表的每个元素，放到集合中。
        for (int a : lst) {
            set.add(a);
        }
        // 取出集合的每个元素，放到列表中。
        for (int b : set) {
            ret.add(b);
        }
        return ret;
    }

    public static List<Integer> quChong1(List<Integer> lst) {
        Set<Integer> set = new HashSet<>();
        List<Integer> ret = new ArrayList<>();

        // 取出列表的每个元素，放到集合中。
        set.addAll(lst);
        // 取出集合的每个元素，放到列表中。
        ret.addAll(set);
        return ret;
    }

    public static List<Integer> quChong2(List<Integer> lst) {

        // 取出列表的每个元素，放到集合中。
        Set<Integer> set = new HashSet<>(lst); // 带参的构造方法
        // 取出集合的每个元素，放到列表中。
        return new ArrayList<>(set); // 带参的构造方法
    }
}
